package com.dy.design_pattern_study.composite_pattern.dome1;

/**
 * @CreateBy zhangdingyi
 * @Date 2023-04-12
 * @Content 组合中的对象声明接口
 * 这个是组合中对象接口声明
 * 在适合的情况下，可以实现所有类共有接口缺省行为，
 * 声明一个接口用于访问和管理Component 的子部件
 *
 */
public abstract class Component {
    protected String name;

    public Component(String name) {
        this.name = name;
    }

    /**
     * 提供子节点的增加功能
     * @param component
     */
    public abstract void add(Component component);

    /**
     * 提供子节点的删除功能
     * @param component
     */
    public abstract void remove(Component component);

    /**
     * 展示子节点的数值
     * @param depth
     */
    public abstract void display(int depth);

    public String printStr(int depth){
        StringBuffer buffer = new StringBuffer("-");
        for (int i = 0; i < depth; i++) {
            buffer.append("-");
        }
        buffer.append(name);
        //System.out.println();
        return buffer.toString();
    }

}
